import { app, BrowserWindow } from 'electron'
import { electronApp, optimizer } from '@electron-toolkit/utils'
import { createMainWindow } from './window/windowManager'
import { registerIpcHandlers } from './ipc/handlers'

/**
 * 应用程序初始化
 */
function initializeApp(): void {
  // 设置应用用户模型id
  electronApp.setAppUserModelId('com.electron')

  // 默认打开或关闭DevTools
  // 在生产环境中忽略CommandOrControl + R
  // 参考 https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  // 注册IPC处理程序
  registerIpcHandlers()

  // 创建主窗口
  createMainWindow()

  // macOS应用激活处理
  app.on('activate', function () {
    // 在macOS上，当点击dock图标时，通常会重新创建一个窗口
    // 点击dock图标时，如果没有其他窗口打开
    if (BrowserWindow.getAllWindows().length === 0) {
      createMainWindow()
    }
  })
}

// 当Electron完成初始化并准备好创建浏览器窗口时，将调用此方法
// 初始化并准备好创建浏览器窗口时，将调用此方法
// 某些API只能在事件发生后使用
app.whenReady().then(initializeApp)

// 当所有窗口关闭时，除了macOS。在macOS上，通常应用程序和其菜单栏会保持活动状态，直到用户明确退出
// 应用程序和其菜单栏会保持活动状态，直到用户明确退出
// 明确退出
// 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
